Módulo 1 - O Básico

Neste módulo iremos aprender o básico de Python e alguns dos recursos que iremos usar no curso.

  1. Modo mais simples de rodar Python (Editor de Texto + PowerShell/Terminal/bash);
  2. Usar os atalhos de teclado no Jupyter Notebook;
  3. Definir variáveis;
  4. Types
  5. Operadores matemáticos;
  6. Operadores booleanos;
  7. Built-in functions;
  8. Prints
  9. Strings
  10. Lists

Atalhos do Jupyter Notebook (ainda não é bem Python)

  • Pressione ENTER para entrar no modo Edit (verde)
  • Pressione ESC para entrar no modo Command (azul)
  • No modo Commando, pressione H

Modo Command

  1. O que é célula?
  2. Diferença entre código e markup
  3. Rodar células
  4. Adicionar células acima e abaixo
  5. Criar três níveis de heading
  6. Apagar/copiar/colar células
  7. Selecionar multiplas células
  8. Salvar o notebook

In [5]:
print 'bem vindos!'


bem vindos!

In [9]:
a = 2 + 3

In [10]:
print a


5

Modo Edit

  1. Ir para o fim da linha;
  2. Ir para o fim da célula;
  3. Ir para a próxima palavra;
  4. Deletar palavras antes e depois;
  5. Dividir a célula;
  6. Juntar as células;

Engenharia Geológica é outra denominação possível para o curso de Geologia. Este profissional pode se dedicar à exploração de recursos naturais como jazidas de minérios e petrolíferas, análise da estrutura do solo para a construção de túneis e barragens, identificação de áreas de risco de abalos sísmicos, recuperação de solos, exploração de lençóis freáticos, entre outras atividades.

, como programar em Python.


In [ ]:
b = a + 8
a - b

In [ ]:
for i in range(2):
print i # erro de identação

Definindo Variáveis (Variables)

Variáveis são os nomes que representam um valor ou algo do tipo.


In [ ]:
x = 2
y = 3
h = 'Bom dia!'

In [ ]:
print x, y, x+y, h
print h

Comentários (Comments)


In [ ]:
# Esse é um comentário dentro de um código de Python
Esse não é e irá dar erro. O Python acha que são variáveis

In [ ]:
# Comentários podem ser utilizados para desativar partes do código. CTRL /
print 1
# print 2
print 3, 'Bruno' # Após o # (octothorpe, o nome disso é octothorpe), tudo é ignorado

Operadores Matemáticos

ORDEM DAS EQUAÇÕES: Parentheses Exponents Multiplication Division Addition Subtraction


In [ ]:
1+2

In [ ]:
2-1

In [ ]:
2*5

In [ ]:
1/2

??


In [ ]:
1/2.0

Operador "mod" retorna o resto de uma divisão.


In [ ]:
15 % 10

Operador "floor" retorna o número inteiro mais próximo da divisão


In [ ]:
15 // 10

In [ ]:
5.6 // 2.2

Operadores Booleanos


In [ ]:
numero_qualquer = 2

In [ ]:
numero_qualquer == 2

In [ ]:
numero_qualquer == 3

In [ ]:
numero_qualquer >= 4

In [ ]:
outro_numero_qualquer = '2'

In [ ]:
outro_numero_qualquer == numero_qualquer

In [ ]:
int(outro_numero_qualquer) == numero_qualquer

In [ ]:
numero_qualquer != 3

In [ ]:
print "É maior?", 5 > -2
print "É maior ou igual?", 5 >= -2
print "É menor ou igual?", 5 <= -2

Built-in functions

Funções pré-definidas no Python tornam a linguagem ainda mais útil.


In [ ]:
print a

In [ ]:
float(a)

In [ ]:
int(2.5)

In [ ]:
c = str(56)

In [ ]:
print c + 2

In [ ]:
c = float(c)

In [ ]:
print c + 2

In [ ]:
c = c / 2

In [ ]:
print c

In [ ]:
bool(1)

In [ ]:
bool(0)

In [ ]:
list('asd')

In [ ]:
list('123')

In [ ]:
range(1, 4)

In [ ]:
abs(-5)

In [ ]:
dir()

In [ ]:
all([True, True, False])

In [ ]:
globals()['b']

In [ ]:
vars()['string1']

In [ ]:
pow(3, 2)

In [ ]:
type(True)

In [ ]:
type(1)

In [ ]:
type((int((float('56'))/10)) * 2.5)

In [ ]:
isinstance(25.0, int)

In [ ]:
isinstance(30, int)

In [ ]:
dicionario = {1: 'Fulano', 2: 'Ciclano'}

In [ ]:
isinstance(dicionario, dict)

In [ ]:
round(52.1025)

In [ ]:
round(52.1025, 3)

In [ ]:
round(52.54545, 2)

In [ ]:
round(5285.54545, -2)

Exercicio 1

Sem usar o mouse!

  1. Transforme uma célula em Markdown (M);
  2. Descreva uma operação qualquer, exemplo: Escolho um número, adiciono 3, multiplico por 20, divido tudo por 10, mostro o valor;
  3. Crie uma nova célula em Código (Y);
  4. Adicione um comentário na célula, exemplo: Aqui será executada a operação descrita acima;
  5. Adicione outras células em Código e coloque cada passo da operação em cada célula, rodando a célula com ALT + ENTER ou CTRL + ENTER;
  6. Deletar a linha do comentário;
  7. Junte todas as células;
  8. Em outra célula, tente criar a mesma operação em uma só linha;
  9. Verifique se o valor é maior ou igual que 20.252;
  10. Descubra qual o Type do resultado final.

Exercicio 2

  1. Utilize a função help em algumas types e funções que você aprendeu e leia o resultado;
  2. Use help na função builtin cmp, interprete e aplique a função 2 vezes para obter resultados diferentes.

In [ ]:
help(85)

In [ ]:
help(range)

In [ ]:
help(isinstance)

In [ ]:
help(pow)

In [ ]:
help(cmp)

Exercício 3

Arredonde o número 11203.25413 para:

  1. 2 casas decimais;
  2. 0 casas decimais;
  3. unidade de milhar
  4. converta para o passo 3 para um string

Pequena lógica e prints inteligentes

Agora que sabemos utilizar a matemática e prints, podemos fazer um pequeno cálculo para uma empresa de transporte.

OBS: Lembre-se sempre de usar nome de variáveis que façam sentido!


In [ ]:
carros = 100
passageiros_por_carro = 4.0
motoristas = 30
passageiros = 90


carros_sem_motoristas = carros - motoristas
carros_com_motoristas = motoristas


capacidade_total = carros_com_motoristas * passageiros_por_carro
media_passageiros_por_carro = passageiros / carros_com_motoristas


print "Existem", carros, "carros disponíveis."
print "Existem apenas", motoristas, "motoristas disponíveis."
print "Existem", carros_sem_motoristas, "carros sem motoristas."
print "Podemos transportar", capacidade_total, "passageiros."
print "Temos", passageiros, "passageiros."
print u"Precisamos colocar em média", media_passageiros_por_carro, "passageiros em cada carro."

Exercício 4

  1. A empresa contratou 20 motoristas e demitiu 5.
  2. O número de passageiros aumentou 90%.
  3. E agora!? Calcule se é possível fazer o transporte.
  4. O que acontece se mudar passageiros_por_carro de 4.0 para 4?

Mais operações matemáticas?


In [ ]:
import math

In [ ]:
math.log(10)

In [ ]:
math.log10(100)

In [ ]:
angulo = 45

In [ ]:
angulo_radianos = math.radians(angulo)

In [ ]:
print math.tan(angulo_radianos)

In [ ]:
math.exp(2)

In [ ]:
help(math.ceil)

In [ ]:
math.ceil(25.325)

In [ ]:
math.floor(25.325)

In [ ]:
import random

In [ ]:
random.random()

In [ ]:
random.randint(10, 36)

Exercício 5

  1. Calcule o seno de 36 graus.
  2. Logaritmo neperiano de 12

Outro tipo de print com strings e numeros


In [6]:
nome = 'Bruno'
idade = 25 # not a lie
peso = 70
altura = 180
cor_olhos = 'castanhos'
cor_dentes = 'brancos'
cor_cabelo = 'marrom'

print "Vamos falar sobre %s." % nome
print "Sua altura é %d cm." % altura
print "Ele pesa %d kg." % peso
print "Ele não é tão pesado."
print "Ele tem olhos %s e cabelo %s." % (cor_olhos, cor_cabelo)
print "Os dentes dele são %s dependendo da quantidade de café que ele bebeu." % cor_dentes
print ''
print "Se eu somar %d, %d, e %d. Eu obtenho %d." % (
    idade, peso, altura, idade + peso + altura)


Vamos falar sobre Bruno.
Sua altura é 180 cm.
Ele pesa 70 kg.
Ele não é tão pesado.
Ele tem olhos castanhos e cabelo marrom.
Os dentes dele são brancos dependendo da quantidade de café que ele bebeu.

Se eu somar 25, 70, e 180. Eu obtenho 275.

Exercício 6

  1. Converta o peso e altura de kg e cm para libras e polegadas;
  2. Tente colocar o nome de uma variável igual a um número;
  3. Faça 3 prints utilizando os "formatters" %s, %d e %f;
  4. Eu falei que algumas coisas iam parecer estranho.

Mais strings


In [13]:
es = "Lado esquerdo e..."
di = " lado direito do string."

print es + di


Lado esquerdo e... lado direito do string.

In [16]:
print es * 3 + di * 2


Lado esquerdo e...Lado esquerdo e...Lado esquerdo e... lado direito do string. lado direito do string.


In [114]:
print "Jan\nFev\nMar\nAbr\nMai\nJun\nJul\nAgo"


Jan
Fev
Mar
Abr
Mai
Jun
Jul
Ago

In [11]:
print 'a\ta'
print ''
print 'b\tb'


a	a

b	b

In [96]:
print """
Rotina:
\t- Comer
\t- Dormir\n\t- Repetir
"""


Rotina:
	- Comer
	- Dormir
	- Repetir


In [113]:
print '''
ID\tNome\tIdade\tSímbolo Escolhido
----------------------------------------
1\tBruno\t25\t \\n
2\tJoão\t92\t \\
3\tCiclano\t2\t \"
'''


ID	Nome	Idade	Símbolo Escolhido
----------------------------------------
1	Bruno	25	 \n
2	João	92	 \
3	Ciclano	2	 "

Exercício 7

  1. Crie uma tabela qualquer com 2 colunas e 3 linhas utilizando \t

Listas


In [17]:
uma_lista = [1, 2, 3, 'Item 4', 5, 6]

In [19]:
uma_lista[0]


Out[19]:
1

In [20]:
uma_lista[2]


Out[20]:
3

In [21]:
uma_lista[3]


Out[21]:
'Item 4'

In [24]:
uma_lista[1:6]


Out[24]:
[2, 3, 'Item 4', 5, 6]

In [26]:
uma_lista[:]


Out[26]:
[1, 2, 3, 'Item 4', 5, 6]

In [40]:
uma_lista[::2]


Out[40]:
[1, 3, 5]

In [43]:
uma_lista[::-1]


Out[43]:
[6, 5, 'Item 4', 3, 2, 1]

In [44]:
uma_lista[::-2]


Out[44]:
[6, 'Item 4', 2]

In [45]:
uma_lista[3::]


Out[45]:
['Item 4', 5, 6]

In [47]:
uma_lista[3] = 4

In [48]:
uma_lista


Out[48]:
[1, 2, 3, 4, 5, 6]

In [49]:
uma_lista == range(1, 7)


Out[49]:
True

In [72]:
outra_lista = uma_lista + uma_lista
print outra_lista


[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]

In [73]:
outra_lista.count(1)


Out[73]:
2

In [74]:
outra_lista.pop(0)


Out[74]:
1

In [75]:
outra_lista.count(1)


Out[75]:
1

In [76]:
outra_lista


Out[76]:
[2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]

In [77]:
outra_lista.remove(6)

In [78]:
outra_lista


Out[78]:
[2, 3, 4, 5, 1, 2, 3, 4, 5, 6]

In [79]:
outra_lista.insert(0, 1)

In [80]:
outra_lista


Out[80]:
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 6]

In [81]:
outra_lista.append('7')

In [83]:
terceira_lista = outra_lista[0:4]

In [88]:
(terceira_lista * 3)[::-1]


Out[88]:
[4, 3, 2, 1, 4, 3, 2, 1, 4, 3, 2, 1]

In [89]:
lista_dentro_de_lista = [terceira_lista, outra_lista, ['Banana', 'Laranja'], uma_lista]

In [91]:
lista_dentro_de_lista


Out[91]:
[[1, 2, 3, 4],
 [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 6, '7'],
 ['Banana', 'Laranja'],
 [1, 2, 3, 4, 5, 6]]

In [93]:
lista_dentro_de_lista[3][0]


Out[93]:
1

Perguntando ao usuário


In [118]:
print "Qual a sua idade? ",
idade = raw_input()
print "Qual a sua altura? (em cm)\n",
altura = raw_input()

peso = raw_input("Qual seu peso? (em kg) ",)

print "Então quer dizer que você tem %s anos, tem %r cm de altura e %r kg." % (
    idade, altura, peso)


Qual a sua idade? 25
 Qual a sua altura? (em cm)
170
Qual seu peso? (em kg) 80
Então quer dizer que você tem 25 anos, tem '170' cm de altura e '80' kg.

Exercício 8

  1. Crie uma lista vazia
  2. Pergunte ao usuario: Um nome, um número
  3. Adicione os valores na lista
  4. Repita 3 vezes o processo criando listas diferentes
  5. Faça uma tabela utilizando \t. Cada linha será os valores de uma lista na ordem: Número, Nome

Dicionarios

Os dicionários são as "listas telefônicas do Python".

É um tipo de estrutura que permite dados organizados em função de determinados valores.

Um dicionário pode ser usado para registrar endereços e telefones de várias pessoas.


In [34]:
dados = {'Renato': 
         {'Endereco': 'Rua XV, Numero 22, Pelotas - RS',
          u'Telefone': '53 32251421'},
        'Claudio': 
         {'Endereco': 'Rua V, Numero 5, Rio Grande - RS',
          'Telefone': '53 4100142'}
        }

In [21]:
dados['Claudio']


Out[21]:
{u'Endere\xe7o': 'Rua V, Numero 5, Rio Grande - RS', u'Telefone': '53 4100142'}

In [35]:
dados['Claudio']['Endereco']


Out[35]:
'Rua V, Numero 5, Rio Grande - RS'

In [36]:
dados['Rodrigo'] = {u'Endereco': 'Rua Antonio dos Anjos, Numero 541, Pelotas - RS', 
                    u'Telefone': '53 6151212'}

In [38]:
dados.keys()


Out[38]:
['Renato', 'Claudio', 'Rodrigo']

In [39]:
dados.values()


Out[39]:
[{'Endereco': 'Rua XV, Numero 22, Pelotas - RS', u'Telefone': '53 32251421'},
 {'Endereco': 'Rua V, Numero 5, Rio Grande - RS', 'Telefone': '53 4100142'},
 {u'Endereco': 'Rua Antonio dos Anjos, Numero 541, Pelotas - RS',
  u'Telefone': '53 6151212'}]

In [43]:
dados['Pedro'] = dict(Endereco='Avenida Ronaldinho Gaucho, 1100, Caxias - RS', Telefone='54 20320022')

In [62]:
def print_dados(nome):
    print u'Nome: %s' % (nome)
    print u'Endereço: %s' % (dados[nome]['Endereco'])
    print u'Telefone: %s' % (dados[nome]['Telefone'])

In [64]:
print_dados('Pedro')
print '-----'
print_dados('Rodrigo')


Nome: Pedro
Endereço: Avenida Ronaldinho Gaucho, 1100, Caxias - RS
Telefone: 54 20320022
-----
Nome: Rodrigo
Endereço: Rua Antonio dos Anjos, Numero 541, Pelotas - RS
Telefone: 53 6151212

In [ ]:

Exercício para Casa 1

No PowerShell digitar:

conda install scipy matplotlib ipython-notebook pandas netcdf4 basemap

conda install -c conda-forge jupyter_contrib_nbextensions

conda install -c conda-forge jupyter_nbextensions_configurator

Irá instalar alguns dos módulos que iremos utilizar na próxima aula;

  1. Estudar dicionários Python: "help(dict)" ou pesquisar na internet e trazer exemplos;
  2. Escrever a importância de cada um desses módulos de Python para engenheiros:

In [127]:
help(dict)


Help on class dict in module __builtin__:

class dict(object)
 |  dict() -> new empty dictionary
 |  dict(mapping) -> new dictionary initialized from a mapping object's
 |      (key, value) pairs
 |  dict(iterable) -> new dictionary initialized as if via:
 |      d = {}
 |      for k, v in iterable:
 |          d[k] = v
 |  dict(**kwargs) -> new dictionary initialized with the name=value pairs
 |      in the keyword argument list.  For example:  dict(one=1, two=2)
 |  
 |  Methods defined here:
 |  
 |  __cmp__(...)
 |      x.__cmp__(y) <==> cmp(x,y)
 |  
 |  __contains__(...)
 |      D.__contains__(k) -> True if D has a key k, else False
 |  
 |  __delitem__(...)
 |      x.__delitem__(y) <==> del x[y]
 |  
 |  __eq__(...)
 |      x.__eq__(y) <==> x==y
 |  
 |  __ge__(...)
 |      x.__ge__(y) <==> x>=y
 |  
 |  __getattribute__(...)
 |      x.__getattribute__('name') <==> x.name
 |  
 |  __getitem__(...)
 |      x.__getitem__(y) <==> x[y]
 |  
 |  __gt__(...)
 |      x.__gt__(y) <==> x>y
 |  
 |  __init__(...)
 |      x.__init__(...) initializes x; see help(type(x)) for signature
 |  
 |  __iter__(...)
 |      x.__iter__() <==> iter(x)
 |  
 |  __le__(...)
 |      x.__le__(y) <==> x<=y
 |  
 |  __len__(...)
 |      x.__len__() <==> len(x)
 |  
 |  __lt__(...)
 |      x.__lt__(y) <==> x<y
 |  
 |  __ne__(...)
 |      x.__ne__(y) <==> x!=y
 |  
 |  __repr__(...)
 |      x.__repr__() <==> repr(x)
 |  
 |  __setitem__(...)
 |      x.__setitem__(i, y) <==> x[i]=y
 |  
 |  __sizeof__(...)
 |      D.__sizeof__() -> size of D in memory, in bytes
 |  
 |  clear(...)
 |      D.clear() -> None.  Remove all items from D.
 |  
 |  copy(...)
 |      D.copy() -> a shallow copy of D
 |  
 |  fromkeys(...)
 |      dict.fromkeys(S[,v]) -> New dict with keys from S and values equal to v.
 |      v defaults to None.
 |  
 |  get(...)
 |      D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None.
 |  
 |  has_key(...)
 |      D.has_key(k) -> True if D has a key k, else False
 |  
 |  items(...)
 |      D.items() -> list of D's (key, value) pairs, as 2-tuples
 |  
 |  iteritems(...)
 |      D.iteritems() -> an iterator over the (key, value) items of D
 |  
 |  iterkeys(...)
 |      D.iterkeys() -> an iterator over the keys of D
 |  
 |  itervalues(...)
 |      D.itervalues() -> an iterator over the values of D
 |  
 |  keys(...)
 |      D.keys() -> list of D's keys
 |  
 |  pop(...)
 |      D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
 |      If key is not found, d is returned if given, otherwise KeyError is raised
 |  
 |  popitem(...)
 |      D.popitem() -> (k, v), remove and return some (key, value) pair as a
 |      2-tuple; but raise KeyError if D is empty.
 |  
 |  setdefault(...)
 |      D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D
 |  
 |  update(...)
 |      D.update([E, ]**F) -> None.  Update D from dict/iterable E and F.
 |      If E present and has a .keys() method, does:     for k in E: D[k] = E[k]
 |      If E present and lacks .keys() method, does:     for (k, v) in E: D[k] = v
 |      In either case, this is followed by: for k in F: D[k] = F[k]
 |  
 |  values(...)
 |      D.values() -> list of D's values
 |  
 |  viewitems(...)
 |      D.viewitems() -> a set-like object providing a view on D's items
 |  
 |  viewkeys(...)
 |      D.viewkeys() -> a set-like object providing a view on D's keys
 |  
 |  viewvalues(...)
 |      D.viewvalues() -> an object providing a view on D's values
 |  
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |  
 |  __hash__ = None
 |  
 |  __new__ = <built-in method __new__ of type object>
 |      T.__new__(S, ...) -> a new object with type S, a subtype of T